import axios from 'axios'
import globalVariable from '@/api/global_variable.js'
//import Cookie from 'js-cookie'

// 设置 POST 请求头
axios.defaults.headers.post['Content-Type'] = 'application/json'

// 在向服务器发送前，修改请求数据(只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法)
//axios.defaults.transformRequest = [(data) => { return JSON.stringify(data) }]

// 在传递给 then/catch 前，允许修改响应数据
//axios.defaults.transformResponse = [(data) => { return JSON.parse(data) }]

// 配置 CORS 跨域
// 表示跨域请求时是否需要使用凭证
axios.defaults.withCredentials = true
axios.defaults.dataType = "json"

axios.defaults.crossDomain = true

axios.defaults.emulateJSON = true

// 设置超时
axios.defaults.timeout = 40000

// 拦截器的说明
// 1、interceptor必须在请求前设置才有效。
// 2、直接为axios全局对象创建interceptor， 会导致全局的axios发出的请求或接收的响应都会被拦截到， 所以应该使用axios.create() 来创建单独的axios实例。
// 设置地址

// 创建axios实例
let instance = axios.create({
  baseURL: globalVariable.baseURL
})

// 拼装url
function getUrl (url, params) {
  let i = 0
  if (!params) {
    params = {}
  }
  if (url.indexOf('/') !== 0) {
    url = '/' + url
  }
  if (url.indexOf('?') < 0) {
    url += '?'
  } else {
    url += '&'
  }
  for (let item in params) {
    i += 1
    if (typeof params[item] !== 'function') {
      url += encodeURIComponent(item) + '=' + encodeURIComponent(params[item]) + (i !== Object.getOwnPropertyNames(params).length ? '&' : '')
    }
  }
  // 去除accessToken校验
  // url += 'accessToken=' + token;
  return url
}
// Add a request interceptor
instance.interceptors.request.use(
  config => {
    /*if (store.getters.token) {
      config.headers['X-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
    }*/
    //config.data = JSON.stringify(config.data)
    //config.headers['Content-Type'] ='application/x-www-form-urlencoded';
    //config.headers['X-Requested-With'] ='XMLHttpRequest';
   /* if(config.method=='get' ){
	    config.transformRequest =  [function(data) {
	      let ret = ''
	      for (let it in data) {
	          ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
	      }
	      return ret
	    }];
    }*/
    return config
  },
  error => {
    // Do something with request error
    Promise.reject(error)
  }
)

// Add a response interceptor
instance.interceptors.response.use(function (response) {
  // Do something with response data
  //session 过期跳到登录页
  if(response.data.status== 170020){
    // 服务端session过期，前端没有清空了浏览器缓存的情况
    let userinfo = (localStorage.getItem('userInfo') ? JSON.parse(localStorage.getItem('userInfo')) : '') || this.$store.state.userinfo
    localStorage.removeItem('userInfo')
    //skipPageType 0:单单位  1:多单位
    topVue.$router.push({ path: '/ilink/index.html',query:userinfo?(userinfo.loginId?{ loginId: userinfo.loginId}:{}):{}})
  }else{
    return response.data
  }
}, function (error) {
  // Do something with response error
  return Promise.reject(error)
})

/**
 *  暴露fetch方法，调用后台接口
 * @param url
 * @param params
 * @returns {Promise}
 */
const get = (url, params) => {
  return new Promise((resolve, reject) => {
    instance.get(getUrl(url, params))
      .then(response => {
        if (response) {
          if (response.status !== 200) {
            topVue.$message.warning(response.info)
          } else {
            resolve(response)
          }
        } else {
          console.error(url + '：error')
        }
      }, err => {
        reject(err)
      }).catch((error) => {
        reject(error)
      })
  })
}
const post = instance.post

const isDev=process.env.NODE_ENV === 'development'

let instanceBase=axios.create({
  // baseURL:isDev?'/config/':'/ilink-fe-config/zhxf-pc/'
})

instanceBase.interceptors.response.use(function (response) {
  return response.data
}, function (error) {
  return Promise.reject(error)
})

const getJSON=instanceBase.get

export default {
  get,
  post,
  getJSON,
  getUrl
}
